# llm/qwen_llm.py
"""
通义千问大模型调用封装
使用DashScope SDK直接调用，无需LangChain依赖
"""
from typing import Optional, List
import dashscope
import os


class QwenLLM:
    """通义千问大模型封装类"""

    def __init__(self, model: str = "qwen-plus-2025-04-28", temperature: float = 0.3):
        """
        初始化QwenLLM

        Args:
            model: 模型名称
            temperature: 温度参数，控制输出随机性 (0-1)
        """
        self.model = model
        self.temperature = temperature

        # 设置API密钥
        if not dashscope.api_key:
            dashscope.api_key = os.getenv('DASHSCOPE_API_KEY')
            if not dashscope.api_key:
                raise ValueError("未设置DASHSCOPE_API_KEY环境变量")

    def call(self, prompt: str, stop: Optional[List[str]] = None) -> str:
        """
        调用大模型生成响应

        Args:
            prompt: 输入提示词
            stop: 停止词列表（可选）

        Returns:
            str: 模型生成的响应文本

        Raises:
            ValueError: 当API密钥未设置或响应解析失败时
        """
        response = dashscope.Generation.call(
            model=self.model,
            prompt=prompt,
            temperature=self.temperature,
            result_format='message'
        )

        if response.output and response.output.choices:
            return response.output.choices[0].message.content
        elif response.output and hasattr(response.output, 'text'):
            return response.output.text

        raise ValueError(f"无法解析模型响应: {response}")

    def __call__(self, prompt: str) -> str:
        """
        便捷调用方法

        Args:
            prompt: 输入提示词

        Returns:
            str: 模型生成的响应文本
        """
        return self.call(prompt)